package cn.exrick.xboot.modules.Item.web;

import cn.exrick.xboot.common.enums.ExceptionEnum;
import cn.exrick.xboot.common.exception.jiuqiException;
import cn.exrick.xboot.modules.Item.pojo.Item;
import cn.exrick.xboot.modules.Item.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 通用异常处理演示，
 * rest风格接口演示
 */
@RestController
@RequestMapping("item")
public class ItemController {
    @Autowired
    private ItemService itemService;
    @PostMapping
   // @GetMapping
    //@ResponseBody//响应体
    //ResponseEntity 与ResponseBody的区别是返回实体（对象）
    public ResponseEntity<Item> saveItem(Item item){

        //eg校验价格
        if(item.getPrive()==null){
            //校验失败返回400
           // return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
            //因为这样返回只能返回状态码和相应对象实体，不能够返回详细的说明，所以我们采用抛异常的形式来完成这个功能
           //throw new RuntimeException("价格不能为空");
            //但是这样抛异常会让别人认为是后台程序出现错误，所以我们采用统一异常处理，让异常由我们自己处理，使用AOP思想实现（springMVC提供了统一的controller拦截）
            throw new jiuqiException(ExceptionEnum.TEST);
        }
        //如果校验成功返回成功的状态码
        Item newItem=itemService.saveItem(item);
       return  ResponseEntity.status(HttpStatus.CREATED).body(newItem);
    }
    @GetMapping
    public ResponseEntity<Item> saveItem2(Item item){
        item.setName("8520");
        System.out.println("get请求");
        //eg校验价格
        if(true){
            //校验失败返回400
            // return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
            //因为这样返回只能返回状态码和相应对象实体，不能够返回详细的说明，所以我们采用抛异常的形式来完成这个功能
            //throw new RuntimeException("价格不能为空");
            //但是这样抛异常会让别人认为是后台程序出现错误，所以我们采用统一异常处理，让异常由我们自己处理，使用AOP思想实现（springMVC提供了统一的controller拦截）
            throw new jiuqiException(ExceptionEnum.TEST);
        }
        //如果校验成功返回成功的状态码
        Item newItem=itemService.saveItem(item);
        return  ResponseEntity.status(HttpStatus.CREATED).body(newItem);
    }





}
